// 一. 怎么处理await接收错误的情况
// 方式1: 直接.catch
// const res = await loginAPI({
//   mobile: '1390000000',
//   code: '246810'
// }).catch(err => {
//   console.log(err)
// })
// console.log(res)

// 方式2. try+catch
// try {
//   const res = await loginAPI({
//     mobile: '1390000000',
//     code: '246810'
//   })
//   console.log(res)
// } catch (err) {
//   console.error(err)
// }

// 方式3. awaitTo技术
// const [err, res] = await to(loginAPI({
//   mobile: '1390000000',
//   code: '246810'
// }))
// console.log(err)
// console.log(res)
// await取代then函数, 接收"成功"的结果
// await默认拿不到Promise内的错误信息 - 抛出到控制台阻止代码继续向下执行
// 目标2: 处理await遇到的错误情况
// 方式1: 直接在后面用.catch()
// 方式2: try+catch中提取错误
// 方式3: awaitTo技术 - 链式调用then方法
// 定义to函数, 可以让await提取成功/失败的结果

// 1. 简单复习
// Promise
// 什么: ES6新出的一个构造函数
// 作用: 解决回调函数地狱的问题
// 场景: 管理异步任务, 返回成功/失败的结果
// 使用:
// const PromiseA = new Promise((resolve, reject) => {
//   // 异步代码
//   setTimeout(() => {
//     // 异步结果返回出去:
//     // 成功:
//     // resolve('ajax成功而来') // resove()  => 当前Promise对象的then()里函数体执行
//     // 失败:
//     reject(new Error('报错了')) // reject() => 当前Promise对象的catch()里函数体执行
//   }, 2000)
// })
// PromiseA.then(res => {
//   console.log(res)
// }).catch(err => {
//   console.dir(err)
// })

// 2. then()和catch()在原地返回值是什么?
// 一个全新的Promise对象
// const PromiseA = new Promise((resolve, reject) => {
//   // 异步代码
//   setTimeout(() => {
//     // 异步结果返回出去:
//     // 成功:
//     // resolve('ajax成功而来') // resove()  => 当前Promise对象的then()里函数体执行
//     // 失败:
//     reject(new Error('报错了')) // reject() => 当前Promise对象的catch()里函数体执行
//   }, 2000)
// })
// const PromiseB = PromiseA.then()
// console.log(PromiseB)

// 3. then()里函数体 和 catch()里函数体里  "return的值" - 会返回给下一个Promise的then
// const PromiseA = new Promise((resolve, reject) => {
//   // 异步代码
//   setTimeout(() => {
//     // 异步结果返回出去:
//     // 成功:
//     // resolve('ajax成功而来') // resove()  => 当前Promise对象的then()里函数体执行
//     // 失败:
//     reject(new Error('报错了')) // reject() => 当前Promise对象的catch()里函数体执行
//   }, 2000)
// })
// const PromiseB = PromiseA.then(res => {
//   return [null, res]
// }).catch(err => {
//   return [err, null]
// })
// PromiseB.then(resB => {
//   console.log(resB)
// })

// 4. await来接收结果
// await默认只能接收then的结果
const PromiseA = new Promise((resolve, reject) => {
  // 异步代码
  setTimeout(() => {
    // 异步结果返回出去:
    // 成功:
    // resolve('ajax成功而来') // resove()  => 当前Promise对象的then()里函数体执行
    // 失败:
    reject(new Error('报错了')) // reject() => 当前Promise对象的catch()里函数体执行
  }, 2000)
})
const PromiseB = PromiseA.then(res => {
  return [null, res]
}).catch(err => {
  return [err, null]
})
// PromiseB.then(resB => {
//   console.log(resB)
// })
async function created() {
  const [err, res] = await PromiseB // 用await取代了then函数(PromiseB来拿到PromiseA成功/失败return的结果)
  console.log(err)
  console.log(res)
}
created()

// 在App.vue中使用的示例代码
// const [, res] = await loginAPI({ // ,占位,我要接收数组的第二位的值解构出来, loginAPI返回的是[错误对象, 成功对象]
//   mobile: '13900000000',
//   code: '246810'
// }) // PromiseB-then里返回一个数组
// console.log(res)

